import axios , { AxiosError } from 'axios'
import { Message } from 'element-ui';
import store from '@/store'

const request = axios.create({
    baseURL: process.env.VUE_APP_AJAX_URL
})
/*
    请求拦截器

*/
request.interceptors.request.use(
    // 请求发送前的额外处理
    function(config){
        // console.log("request:",config);
        // return 请求需要的配置参数
        if(!config.isPublic){
            config.headers.Authorization = store.state.token
        }
        return config;
    }
)


/*
 响应拦截器：
    完成异步请求发送后的数据提前拦截处理，将处理的结果进行转换或者重新定义，
    并将转换后的结果返回后续的promise进行操作
*/
request.interceptors.response.use(
    // 响应成功后的拦截器执行方法
    function (response) {
        // return response.data
        // 如果后端严格按照规范构建响应操作，后台响应的相关数据逻辑判断也可以提前处理
        let { data,meta } = response.data;
        if(meta.status>=400){
            Message.error(meta.msg)
        }
        return data;
    },
    // 响应失败后的拦截器执行方法
    function (error) {
        if(process.env.NODE_ENV=="development"){
            console.log(error);
        }
        if (error instanceof AxiosError) {
            if (error.response instanceof XMLHttpRequest) {
                Message.error("网络异常");
            } else {
                let code = error.response.status;
                switch (code) {
                    case 404:
                        Message.error("网络资源不存在");
                        break;
                    case 500:
                        Message.error("服务器运行错误，请联系管理员");
                        break;
                    default:
                        Message.error("请求提示，稍后重试");
                        break;
                }
            }
        } else {
            Message.error("程序运行错误");
        }
        return "error";
    }
)

export default request;